#ifndef PID_CONTROLLER_H
#define PID_CONTROLLER_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/**
 * @brief PID 控制器结构体
 */
typedef struct {
    float P;                // 比例系数
    float I;                // 积分系数
    float D;                // 微分系数
    float output_ramp;      // 输出斜率限制（单位：每秒）
    float limit;            // 输出限制（最大/最小输出）

    float p_out;
    float i_out;
    float d_out;
    float end_out;
    float error_prev;       // 上一次误差
    float output_prev;      // 上一次输出值
    float integral_prev;    // 上一次积分值
    int64_t timestamp_prev; // 上一次时间戳（单位：微秒）
} PIDController;

/**
 * @brief 初始化 PID 控制器
 * @param pid PIDController 指针
 * @param P 比例系数
 * @param I 积分系数
 * @param D 微分系数
 * @param ramp 输出变化速率限制（单位：每秒）
 * @param limit 输出最大绝对值限制
 */
void PIDController_Init(PIDController* pid, float P, float I, float D, float ramp, float limit);

/**
 * @brief 更新 PID 输出
 * @param pid PIDController 指针
 * @param error 当前误差值
 * @return 控制输出值
 */
float PIDController_Update(PIDController* pid, float error);

#ifdef __cplusplus
}
#endif

#endif // PID_CONTROLLER_H
